package com.jctrip.hotel.source.model.wehotel.resq;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;

import lombok.Builder;
import lombok.Data;

/**
 * @Author: beihai
 * @Date: 2022-03-14 15:56
 * @Description:
 */
@Data
@Builder
public class PostOrder implements Serializable {

    private static final long serialVersionUID = -8909935383360403175L;

    /**
     * 酒店ID
     */
    @NotBlank
    private String innId;

    /**
     * 房型编号
     */
    @NotBlank
    private String roomTypeId;

    /**
     * 商品编号
     */
    @NotBlank
    private String productCode;

    /**
     * 房间数量
     */
    @NotNull
    private Integer roomCount;

    /**
     * 入住营业日，格式为yyyy-MM-dd。
     * 限制：
     * 不能早于当天营业日。
     * 当天营业日入住最晚在次日03:00前下单（这是理论最晚时间，实际允许最晚下单时间按产品规则）。
     */
    @NotBlank
    private String dtArrorig;

    /**
     * 离店营业日，格式yyyy-MM-dd。
     * 限制：
     * 必须大于入住营业日。可预订的最大入住天数为15天。
     */
    @NotBlank
    private String dtDeporig;

    /**
     * 支付方式。0：到付，1：企业储值预付 2 月结预付（预付totalRate必传）
     */
    @NotNull
    private Integer payType;

    /**
     * 订单价格，校验订单价格
     */
    @NotNull
    private Double totalRate;

    /**
     * 第三方渠道的订单号
     */
    @NotBlank
    private String externalId;

    /**
     * 入住人信息。入住人信息数量与房间数量原则上一致
     * guestName    String  是	入住人姓名 预定丽笙时为英文：MING LI
     * guestMobile	String	是	入住人手机
     * guestIDCard	String	否	入住人证件号(活动订单必填)
     * guestIDCardType  Integer 否   入住人证件类型(活动订单必填) 10:身份证、11:台湾居民来往大陆通行证、12:港澳来往大陆通行证、13:外籍护照
     * lastName		String	否	丽笙品牌才传：英文姓 例：LI
     * firstName	String	否	丽笙品牌才传：英文名 例：MING
     */
    @NotNull
    private List<Guest> passengers;

    /**
     * 到店时间，格式yyyy-MM-dd HH:mm:ss。
     * 现付无担保订单到店时间理论取值范围（T为入住营业日）：T 13:00:00 到 T+1 04:00:00。
     * 预付担保单订单到店时间无限制。
     * 18:00后预订当天入住的正价房必需传值。
     */
    private String lastArrTime;

    /**
     * 订单备注，内容不能超过200个字，限制：不含json特殊字符
     */
    private String remarks;


    /**
     * 预订人手机号，必须为该公司员工，如果未绑定过公司自动绑定
     */
    private String bookMobile;

    /**
     * 预订人姓名。如若不传预订姓名手机号，默认预订人为企业管理员
     */
    private String bookName;

    /**
     * 预订人证件号码(本人预定本人入住活动订单必填)
     */
    private String bookIdCard;

    /**
     * 预订人证件类型(本人预定本人入住活动订单必填) 10:身份证、11:台湾居民来往大陆通行证、12:港澳来往大陆通行证、13:外籍护照
     */
    private Integer bookIdCardType;

    /**
     * 订单其他费用，如果需要额外收费这个字段必填
     */
    private BigDecimal feeRate;

    /**
     * 只有丽笙品牌才传：双人价还是单人价
     */
    private Integer guestsNum;


    /**
     * guestName    String  是	入住人姓名 预定丽笙时为英文：MING LI
     * guestMobile	String	是	入住人手机
     * guestIDCard	String	否	入住人证件号(活动订单必填)
     * guestIDCardType  Integer 否   入住人证件类型(活动订单必填) 10:身份证、11:台湾居民来往大陆通行证、12:港澳来往大陆通行证、13:外籍护照
     * lastName		String	否	丽笙品牌才传：英文姓 例：LI
     * firstName	String	否	丽笙品牌才传：英文名 例：MING
     */
    @Data
    @Builder
    public static class Guest implements Serializable {

        private static final long serialVersionUID = -7369342686338801997L;

        @NotBlank
        private String guestName;

        @NotBlank
        private String guestMobile;

        private Integer guestIDCardType;

        private String guestIDCard;

        private String lastName;

        private String firstName;
    }
}
